package level;

import flixel.FlxObject;
import flixel.group.FlxTypedGroup;
import actions.BasicContainer;
import actions.ActionSource;



//////////////////////////////////////////////////////////////////
/// \class: Computer
/// \brief: Elemento que permite al personaje interactuar con el
///			entorno de programación. No tienen representación visible
///			(están en el fondo del tilemap). Son dueñas de los contendores
///			con las acciones disponibles y con las que ejecuta el robot
//////////////////////////////////////////////////////////////////
class Computer extends FlxObject{
	public var id(default, null): Int;	// el id del actor que modificamos

	// se supone que a éstos los debe crear la computadora...
	public var actionContainer(default, null): BasicContainer;	// el contenedor base del cual leer las acciones
	public var actionSource(default, null): ActionSource;	// el contenedor base del cual leer las acciones

	public function new(X: Float, Y: Float, Id: Int, AvailableActions: String){
		super(X, Y);
		width = 16;
		height = 32;
		id = Id;
		_computers.add(this);
		actionSource = new ActionSource(X - 120, Y, AvailableActions);
		actionSource.alphaMultiplier = 0.7;
		actionContainer = new BasicContainer();
		actionContainer.alphaMultiplier = 0.7;
		actionContainer.setPosition(X + 68, Y );
	}



	public function bind()
	{
		
	}

	public static function clearAll(){
		_computers.clear();
	}

	public static function findById(Id: Int)
	{
		for(computer in _computers.members)
		{
			if(computer.id == Id)
			{
				return computer;
			}
		}
		throw("ERROR: No se encontro computadora con id: "+Id);
		return null;
	}

	/// TODO: Esto debería ser publico o private?????????
	public static var _computers: FlxTypedGroup<Computer> = new FlxTypedGroup<Computer>();
}